<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::cfg::Option_set_base Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1cfg.html">cfg</a></li><li class="navelem"><a class="el" href="classflow_1_1cfg_1_1Option__set__base.html">Option_set_base</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pro-types">Protected Types</a> &#124;
<a href="#pro-static-methods">Static Protected Member Functions</a> &#124;
<a href="classflow_1_1cfg_1_1Option__set__base-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::cfg::Option_set_base Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Un-templated base for <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a>.  
 <a href="classflow_1_1cfg_1_1Option__set__base.html#details">More...</a></p>

<p><code>#include &lt;option_set.hpp&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::cfg::Option_set_base:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1cfg_1_1Option__set__base__inherit__graph.svg" width="178" height="119"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a812f2164fb689d4cbcaa04f482ecf4cd"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cd">Declare_options_func_call_type</a> { <br />
&#160;&#160;<a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cda4f70649bf85f31925dd145af4c67025c">S_FILL_PARSING_ROLE_OPT_TABLE</a>
, <a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cda2525895c3e467823cc3450761eaac825">S_FILL_OUTPUT_HELP_ROLE_OPT_TABLE</a>
, <a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cda0950d89fa823703860cf10d79f68e806">S_FILL_OUTPUT_CURRENT_ROLE_OPT_TABLE</a>
, <a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cda3f9727baaf0cacb224d783f7c54a3ba4">S_COMPARE_PARSED_VALS</a>
, <br />
&#160;&#160;<a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cdaff70279b5a59725f049c39c5fe5e2910">S_LOAD_VALS_AS_IF_PARSED</a>
, <a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cda1700f8f4a850612c0d81cc197835bda6">S_VALIDATE_STORED_VALS</a>
<br />
 }</td></tr>
<tr class="memdesc:a812f2164fb689d4cbcaa04f482ecf4cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal-use type to use with <a class="el" href="classflow_1_1cfg_1_1Option__set.html#ac6755bc762fc40b1ae8f4bd47c55bd39" title="Short-hand for the ever-important callback passed to the main Option_set constructor.">Option_set::Declare_options_func</a> callback.  <a href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cd">More...</a><br /></td></tr>
<tr class="separator:a812f2164fb689d4cbcaa04f482ecf4cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-methods" name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a1d2f46a93337cf83f1e7b5c3f805725b"><td class="memTemplParams" colspan="2">template&lt;typename Value &gt; </td></tr>
<tr class="memitem:a1d2f46a93337cf83f1e7b5c3f805725b"><td class="memTemplItemLeft" align="right" valign="top">static void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a1d2f46a93337cf83f1e7b5c3f805725b">declare_option_for_output</a> (<a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a> name, opts::options_description *target_opts, const Value &amp;value_default, const Value &amp;current_value, <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a> description)</td></tr>
<tr class="memdesc:a1d2f46a93337cf83f1e7b5c3f805725b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal-through-macro helper function; the user shall not call this directly but only through <a class="el" href="option__set_8hpp.html#ae6bc0bcf28a53682a4c9a5fbe3a3837f" title="Macro the user must use, as prescribed in the flow::cfg::Option_set constructor doc header discussing...">FLOW_CFG_OPTION_SET_DECLARE_OPTION()</a> (see <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a> main constructor doc header).  <a href="classflow_1_1cfg_1_1Option__set__base.html#a1d2f46a93337cf83f1e7b5c3f805725b">More...</a><br /></td></tr>
<tr class="separator:a1d2f46a93337cf83f1e7b5c3f805725b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab79c61f62032b238cb25e132ce1e1d43"><td class="memTemplParams" colspan="2">template&lt;typename Value &gt; </td></tr>
<tr class="memitem:ab79c61f62032b238cb25e132ce1e1d43"><td class="memTemplItemLeft" align="right" valign="top">static void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#ab79c61f62032b238cb25e132ce1e1d43">validate_parsed_option</a> (<a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a> name, const Value &amp;value, Function&lt; bool(const Value &amp;val)&gt; &amp;&amp;validator_func_moved, <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a> validator_cond_str)</td></tr>
<tr class="memdesc:ab79c61f62032b238cb25e132ce1e1d43"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal-through-macro helper function; the user shall not call this directly but only through <a class="el" href="option__set_8hpp.html#ae6bc0bcf28a53682a4c9a5fbe3a3837f" title="Macro the user must use, as prescribed in the flow::cfg::Option_set constructor doc header discussing...">FLOW_CFG_OPTION_SET_DECLARE_OPTION()</a> (see <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a> main constructor doc header).  <a href="classflow_1_1cfg_1_1Option__set__base.html#ab79c61f62032b238cb25e132ce1e1d43">More...</a><br /></td></tr>
<tr class="separator:ab79c61f62032b238cb25e132ce1e1d43"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-types" name="pro-types"></a>
Protected Types</h2></td></tr>
<tr class="memitem:ae2f1d04cb457f4845d636e93aa156f46"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#ae2f1d04cb457f4845d636e93aa156f46">Opt_table</a> = opts::options_description</td></tr>
<tr class="memdesc:ae2f1d04cb457f4845d636e93aa156f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for boost.program_options config options description, each of which is used for parsing and/or describing (to humans) one or more config option/its value.  <a href="classflow_1_1cfg_1_1Option__set__base.html#ae2f1d04cb457f4845d636e93aa156f46">More...</a><br /></td></tr>
<tr class="separator:ae2f1d04cb457f4845d636e93aa156f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-methods" name="pro-static-methods"></a>
Static Protected Member Functions</h2></td></tr>
<tr class="memitem:a74619d5264f549f99b8187f38be3c838"><td class="memTemplParams" colspan="2">template&lt;typename Value &gt; </td></tr>
<tr class="memitem:a74619d5264f549f99b8187f38be3c838"><td class="memTemplItemLeft" align="right" valign="top">static Function&lt; void(const Value &amp;val)&gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a74619d5264f549f99b8187f38be3c838">throw_on_invalid_func</a> (<a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a> name, Function&lt; bool(const Value &amp;val)&gt; &amp;&amp;validator_func_moved, <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a> validator_cond_str)</td></tr>
<tr class="memdesc:a74619d5264f549f99b8187f38be3c838"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a function that wraps a <code>Value</code>-&gt;Boolean validator function, as passed to declare_option_for_parsing() and others, in code that will throw an exception with a human-useful message if that validator function indicates the <code>Value</code> passed to it is invalid; else will no-op.  <a href="classflow_1_1cfg_1_1Option__set__base.html#a74619d5264f549f99b8187f38be3c838">More...</a><br /></td></tr>
<tr class="separator:a74619d5264f549f99b8187f38be3c838"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Un-templated base for <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a>. </p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="ae2f1d04cb457f4845d636e93aa156f46" name="ae2f1d04cb457f4845d636e93aa156f46"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2f1d04cb457f4845d636e93aa156f46">&#9670;&nbsp;</a></span>Opt_table</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#ae2f1d04cb457f4845d636e93aa156f46">flow::cfg::Option_set_base::Opt_table</a> =  opts::options_description</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Short-hand for boost.program_options config options description, each of which is used for parsing and/or describing (to humans) one or more config option/its value. </p>
<p >boost.program_options allows for a wide variety of features and capacities for this object type, but our goal is to use it for our specific and more constrained config context, and hence we use this type in more specific/constrained ways which we describe here.</p>
<p >We use it in our context in two primary roles; and since storage space and processor cycle are not practically affected, we tend to store separate copies of an <code>Opt_table</code> in <em>each</em> role (possibly even more than 1, as there can be sub-roles of each). The roles are:</p><ul>
<li>Parsing: Used during a parsing pass from a given config source (like a config file) solely to parse values and store the resulting bits into a target <code>Values</code> and a mirroring <code>Iterable_values</code>. <code>opts::{parse_*|store}()</code> and other such functions take this <code>Opt_table</code> and a config source as input. Such an <code>Opt_table</code> stores a table of options; for each option storing:<ul>
<li>Name: A string to be found in a config source like a config file.</li>
<li>C++ type: Essentially a size in bytes plus a <code>&gt;&gt;</code> stream input operator for reading values into the target location from the config source.</li>
<li>Target location: Pointer to the actual value, within a <code>Values</code>, which to load with the parsed bits obtained from the config source.</li>
<li>NOTE: There is <em>no</em> default value stores in this <em>parsing-role</em> <code>Opt_table</code>. We expect each target value to already contain the default before parsing begins; if the option is not present in the particular config source, then that value remains untouched. Moreover note that the pre-parse value is not necessarily the user-specified default per se; it might be, for example, the value set by the previous config source's parsing phase; or even (in the case of dynamic option sets) in a much earlier config application.</li>
<li>Note: There's no reason to store a textual description for this role, as the computer doesn't care about human explanations when parsing.</li>
</ul>
</li>
<li>Output: Used in various settings to print out &ndash; to humans &ndash; both the semantic info and actual values of the options maintained by an <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a>. To use this capability of boost.program_options &ndash; which it intends as help text, but we can leverage it in slightly different roles also &ndash; simply output this <em>output-role</em> <code>Opt_table</code> via a stream <code>&lt;&lt;</code>. For each option:<ul>
<li>Name: Same as for the <em>parsing-role</em>.</li>
<li>Description: Textual description of the meaning/semantics of the option.<ul>
<li>If it's not output of help text/similar, then description might be omitted, depending on usefulness.</li>
</ul>
</li>
<li>C++ type: Essentially a size in bytes plus a <code>&lt;&lt;</code> stream output operator for writing values via standard stream output.</li>
<li>Value: A pointer to a value to print out along with the previous name and description. boost.program_options supports printing in one 2 ways:<ul>
<li>Via <code>&lt;&lt;</code> stream output operator. In this case that operator needs to be (conceptually) stored too.</li>
<li>As an explicit string. Sometimes, for human readability, we might want to provide custom output for certain types beyond what <code>&lt;&lt;</code> would do; for example if we store a <code>Fine_duration</code> (typically outputting which would be in nanoseconds, because it usually stores nanoseconds), it's often more convenient to round down (if precision would not be lost) and output using coarser units like sec or even minutes, etc. In this case we would prepare this value as an <code>std::string</code> and store that; instead of storing a value in the original type as in <em>parsing-role</em> <code>Opt_table</code>. At least these reasons exist to print this value:</li>
<li>As the <em>default</em> in a help message. The user would glean that not specifying a value in any config source will lead to this value being taken.</li>
<li>As the <em>current</em> stored value after the last round of parsing. If it is also desired to output a default at the same time, it can be added into the description. </li>
</ul>
</li>
</ul>
</li>
</ul>

</div>
</div>
<h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="a812f2164fb689d4cbcaa04f482ecf4cd" name="a812f2164fb689d4cbcaa04f482ecf4cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a812f2164fb689d4cbcaa04f482ecf4cd">&#9670;&nbsp;</a></span>Declare_options_func_call_type</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">enum class <a class="el" href="classflow_1_1cfg_1_1Option__set__base.html#a812f2164fb689d4cbcaa04f482ecf4cd">flow::cfg::Option_set_base::Declare_options_func_call_type</a></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Internal-use type to use with <a class="el" href="classflow_1_1cfg_1_1Option__set.html#ac6755bc762fc40b1ae8f4bd47c55bd39" title="Short-hand for the ever-important callback passed to the main Option_set constructor.">Option_set::Declare_options_func</a> callback. </p>
<p >The user of the class need not understand this nor use it directly. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a812f2164fb689d4cbcaa04f482ecf4cda4f70649bf85f31925dd145af4c67025c" name="a812f2164fb689d4cbcaa04f482ecf4cda4f70649bf85f31925dd145af4c67025c"></a>S_FILL_PARSING_ROLE_OPT_TABLE&#160;</td><td class="fielddoc"><p >Internal use only through macro. </p>
<p >Do not use directly. </p>
</td></tr>
<tr><td class="fieldname"><a id="a812f2164fb689d4cbcaa04f482ecf4cda2525895c3e467823cc3450761eaac825" name="a812f2164fb689d4cbcaa04f482ecf4cda2525895c3e467823cc3450761eaac825"></a>S_FILL_OUTPUT_HELP_ROLE_OPT_TABLE&#160;</td><td class="fielddoc"><p >Internal use only through macro. </p>
<p >Do not use directly. </p>
</td></tr>
<tr><td class="fieldname"><a id="a812f2164fb689d4cbcaa04f482ecf4cda0950d89fa823703860cf10d79f68e806" name="a812f2164fb689d4cbcaa04f482ecf4cda0950d89fa823703860cf10d79f68e806"></a>S_FILL_OUTPUT_CURRENT_ROLE_OPT_TABLE&#160;</td><td class="fielddoc"><p >Internal use only through macro. </p>
<p >Do not use directly. </p>
</td></tr>
<tr><td class="fieldname"><a id="a812f2164fb689d4cbcaa04f482ecf4cda3f9727baaf0cacb224d783f7c54a3ba4" name="a812f2164fb689d4cbcaa04f482ecf4cda3f9727baaf0cacb224d783f7c54a3ba4"></a>S_COMPARE_PARSED_VALS&#160;</td><td class="fielddoc"><p >Internal use only through macro. </p>
<p >Do not use directly. </p>
</td></tr>
<tr><td class="fieldname"><a id="a812f2164fb689d4cbcaa04f482ecf4cdaff70279b5a59725f049c39c5fe5e2910" name="a812f2164fb689d4cbcaa04f482ecf4cdaff70279b5a59725f049c39c5fe5e2910"></a>S_LOAD_VALS_AS_IF_PARSED&#160;</td><td class="fielddoc"><p >Internal use only through macro. </p>
<p >Do not use directly. </p>
</td></tr>
<tr><td class="fieldname"><a id="a812f2164fb689d4cbcaa04f482ecf4cda1700f8f4a850612c0d81cc197835bda6" name="a812f2164fb689d4cbcaa04f482ecf4cda1700f8f4a850612c0d81cc197835bda6"></a>S_VALIDATE_STORED_VALS&#160;</td><td class="fielddoc"><p >Internal use only through macro. </p>
<p >Do not use directly. </p>
</td></tr>
</table>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a1d2f46a93337cf83f1e7b5c3f805725b" name="a1d2f46a93337cf83f1e7b5c3f805725b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1d2f46a93337cf83f1e7b5c3f805725b">&#9670;&nbsp;</a></span>declare_option_for_output()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void flow::cfg::Option_set_base::declare_option_for_output </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a>&#160;</td>
          <td class="paramname"><em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">opts::options_description *&#160;</td>
          <td class="paramname"><em>target_opts</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Value &amp;&#160;</td>
          <td class="paramname"><em>value_default</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Value &amp;&#160;</td>
          <td class="paramname"><em>current_value</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a>&#160;</td>
          <td class="paramname"><em>description</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Internal-through-macro helper function; the user shall not call this directly but only through <a class="el" href="option__set_8hpp.html#ae6bc0bcf28a53682a4c9a5fbe3a3837f" title="Macro the user must use, as prescribed in the flow::cfg::Option_set constructor doc header discussing...">FLOW_CFG_OPTION_SET_DECLARE_OPTION()</a> (see <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a> main constructor doc header). </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Value</td><td>Type of the value inside a <code>Value_set</code> object. It must be reasonably copyable; and it must be supported by some version (including specialization(s) and overload(s)) of <a class="el" href="namespaceflow_1_1cfg.html#a1f5ff766e52aae24e6d5c876b3b26e96" title="Serializes a value of type Value to the given ostream suitably for output in Option_set-related outpu...">value_to_ostream()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. </td></tr>
    <tr><td class="paramname">target_opts</td><td>The <code>Opt_table</code> that shall be filled out for output to <code>ostream</code>. </td></tr>
    <tr><td class="paramname">value_default</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#ad57de4947f2c8fd5e4663ab982e8dbce" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_help()</a>. </td></tr>
    <tr><td class="paramname">current_value</td><td>Current value to show to the user. </td></tr>
    <tr><td class="paramname">description</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#ad57de4947f2c8fd5e4663ab982e8dbce" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_help()</a>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a74619d5264f549f99b8187f38be3c838" name="a74619d5264f549f99b8187f38be3c838"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a74619d5264f549f99b8187f38be3c838">&#9670;&nbsp;</a></span>throw_on_invalid_func()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Function&lt; void(const Value &amp;val)&gt; flow::cfg::Option_set_base::throw_on_invalid_func </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a>&#160;</td>
          <td class="paramname"><em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Function&lt; bool(const Value &amp;val)&gt; &amp;&amp;&#160;</td>
          <td class="paramname"><em>validator_func_moved</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a>&#160;</td>
          <td class="paramname"><em>validator_cond_str</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a function that wraps a <code>Value</code>-&gt;Boolean validator function, as passed to declare_option_for_parsing() and others, in code that will throw an exception with a human-useful message if that validator function indicates the <code>Value</code> passed to it is invalid; else will no-op. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Value</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. For nice human-readable message formation. </td></tr>
    <tr><td class="paramname">validator_func_moved</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. </td></tr>
    <tr><td class="paramname">validator_cond_str</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. For nice human-readable message formation. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="ab79c61f62032b238cb25e132ce1e1d43" name="ab79c61f62032b238cb25e132ce1e1d43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab79c61f62032b238cb25e132ce1e1d43">&#9670;&nbsp;</a></span>validate_parsed_option()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void flow::cfg::Option_set_base::validate_parsed_option </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a>&#160;</td>
          <td class="paramname"><em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Value &amp;&#160;</td>
          <td class="paramname"><em>value</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Function&lt; bool(const Value &amp;val)&gt; &amp;&amp;&#160;</td>
          <td class="paramname"><em>validator_func_moved</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a>&#160;</td>
          <td class="paramname"><em>validator_cond_str</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Internal-through-macro helper function; the user shall not call this directly but only through <a class="el" href="option__set_8hpp.html#ae6bc0bcf28a53682a4c9a5fbe3a3837f" title="Macro the user must use, as prescribed in the flow::cfg::Option_set constructor doc header discussing...">FLOW_CFG_OPTION_SET_DECLARE_OPTION()</a> (see <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a> main constructor doc header). </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Value</td><td>Type of the value inside a <code>Value_set</code> object. It must be reasonably copyable. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. </td></tr>
    <tr><td class="paramname">value</td><td>Value to validate. </td></tr>
    <tr><td class="paramname">validator_func_moved</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. </td></tr>
    <tr><td class="paramname">validator_cond_str</td><td>See <a class="el" href="classflow_1_1cfg_1_1Option__set.html#aa5ecbc1b1da6efb81002f1431bdbbeaa" title="Internal-through-macro helper function; the user shall not call this directly but only through FLOW_C...">Option_set::declare_option_for_parsing()</a>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>cfg/<a class="el" href="option__set_8hpp.html">option_set.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:32 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
